Some computer systems have a firmware basic input/output system (“BIOS”) containing basic routines which are accessed to boot the computer as well as to initialize and interface hardware with operating system software. The BIOS code is stored as groups of memory “blocks” in one or more non-volatile memory devices. These groups of memory blocks which are stored in the non-volatile memory devices are collectively known as an image. In many modern computer systems, the non-volatile memory devices are re-programmable. These re-programmable memory devices, which are typically known as “flash” memory devices or parts, are a type of non-volatile random access memory (“NVRAM”) that allows the BIOS code to be updated by using software to erase and program each flash memory device.
The image stored in a flash memory device is typically divided into at least two main sections or regions. One such region is known as the “boot block” region and contains the first program code executed by the computer system after it is turned on. Another region is known as the “main BIOS” region which is built as a single unit and includes the program code for the power-on self test (“POST”) portion of the computer startup sequence as well as for managing computer system resources when the computer is running (i.e., “runtime”). The main BIOS region of the image may also contain optional program code and data which is not essential to the computer startup or runtime sequences. This “non-essential” program code may include language modules for providing foreign language support in the computer system or a graphic image which may be displayed to a user during the computer startup sequence.
Occasionally a user may wish to update only a portion of the code in the main BIOS region without having to re-program the entire region. For example, a user may wish to add custom graphics data so that a picture of the user is displayed instead of a default graphic provided by the manufacturer of the computer startup sequence. However, updating this region in a memory device currently requires creating an entirely new image and re-programming each memory block in the main BIOS region, regardless of whether each block actually needs updating. Thus, in updating the main BIOS region, blocks remaining unchanged from a previous version would still be updated by the conventional update process. Furthermore, since the main BIOS region of an image is built as a single unit, errors or corrupted data in even non-essential program modules may cause the computer system to become unbootable.
It is with respect to these considerations and others that the present invention has been made.